package com.zlzlib.librxoknet.demo;


import com.zlzlib.librx.ProgressInfo;
import com.zlzlib.librx.listener.ProgressListener;
import com.zlzlib.librxoknet.base.BaseProRetrofit;

import java.util.List;
import java.util.Map;

import io.reactivex.rxjava3.core.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.Streaming;
import retrofit2.http.Tag;
import retrofit2.http.Url;

/**
 * Created by zlz on 2019/8/22.
 */
public interface DemoService {

    //直接传入url
    @GET
    Observable<ResponseBody> getByUrl(@Url String url);

    //post提交
    @POST("登录的地址")
    //表单形式
    @FormUrlEncoded
    Observable<ResponseBody> login(@Field("data") String data, @FieldMap Map<String, Object> map);

    //POST请求体的方式向服务器传入json字符串@Body
    @POST("add")
    Observable<ResponseBody> addUser(@Body ProgressInfo user);

    //get 请求
    @GET("地址")
    Observable<ResponseBody> getSomeThing(@Query("apptype") int type, @QueryMap Map<Object, Object> map);

    //get下载 大文件  以流的方式写入
    @Streaming
    @GET("地址")
    Call<ResponseBody> downFile();

    //文件上传
    @Multipart
    @POST("地址")
    Call<ResponseBody> uploadFile(@PartMap Map<String, RequestBody> params, @Part RequestBody file);

    @Multipart
    @POST
    Observable<ResponseBody> uploadFile(@Url String url, @Part() List<MultipartBody.Part> files);

    /**  {@link BaseProRetrofit#addLoadProgressListener()}
    /*断点续传下载接口*/
    //@head标签是指定下载的起始位置（断点续传的位置）  "RANGE", "bytes=" + downloadLength + "-" + contentLength
    @Streaming/*大文件需要加入这个判断，防止下载过程中写入到内存中*/
    @GET
    Observable<ResponseBody> download(@Header("RANGE") String start, @Url String url, @Tag ProgressListener listener);

}
